package com.sumainfor.pc.epc.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sumainfor.common.annotation.IgnoreAuth;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author PuaChen
 * @Create 2018-11-16 12:09
 */
public interface StockManageMapper {


    /**
     * 查询所有的领用人的ID
     *
     * @return
     */
    List<String> selectTypeForPeople();

    /**
     * 获得 备件领用单的列表数据
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectListData(Page page, @Param("map") Map<String, Object> params);

    /**
     * 获得 领用单出库操作的 基本商品数据
     *
     * @param stockId
     * @return
     */
    List<Map<String, Object>> getStockActionInfo(String stockId);

    /**
     * 通过规格的编号查询一个单位
     *
     * @param speId
     * @return
     */
    String getMonadBySpeId(String speId);

    /**
     * 获取 领用单详表的商品出库记录
     *
     * @param stockInfoId
     * @return
     */
    List<Map<String, Object>> getStockOutLog(String stockInfoId);

    /**
     * 更新领用表详表资料
     *
     * @param params
     * @return
     */
    int updateStockInfo(Map<String, Object> params);

    /**
     * 插入一条入库记录信息
     *
     * @param params
     * @return
     */
    int insertOutStockInfoLog(Map<String, Object> params);

    /**
     * 更新领用单主表的数据 是否领用完成
     *
     * @param params
     * @return
     */
    int updateRecMain(Map<String, Object> params);

    /**
     * 查询未完成的数量 领用单
     *
     * @param recId
     * @return
     */
    int selectNotDoneCount(String recId);

    /**
     * 备件出库或者入库 进行记录的操作
     *
     * @param params
     * @return
     */
    int insertStockMainWriteOutLog(Map<String, Object> params);

    /**
     * 分组SQL 查询需要的商品表的数据
     *
     * @param field 需要分组的字段名称
     * @return
     */
    List<Map<String, Object>> getShopTypes(@Param("field") String field);

    /**
     * 查询获取 备件库存的列表信息
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectStockStoreList(Page page, @Param("map") Map<String, Object> params);

    /**
     * 获取这个商品型号的所有信息 包括规格 商品表信息等。。。
     *
     * @param moId
     * @return
     */
    Map<String, Object> getShopMoForInfos(String moId);

    /**
     * 获得出库日志，根据型号的编号 获得所有的领用人的ID
     *
     * @param moId
     * @return
     */
    List<String> selectStockOutLogGetPeopleId(@Param("moId") String moId);

    /**
     * 获得出库日志中 型号
     *
     * @param moId
     * @return
     */
    List<Map<String, Object>> selectStockInputLogSupName(@Param("moId") String moId);


    /**
     * 获得出库记录的信息列表
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectStoreOutputList(Page page, @Param("map") Map<String, Object> params);

    /**
     * 获得入库的信息列表
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectStoreInputList(Page page, @Param("map") Map<String, Object> params);

    /**
     * 获取商品主表中所有的商品名称
     *
     * @param typeId 类型的ID
     * @return
     */
    List<Map<String, Object>> selectShopNames(@Param("typeId") String typeId);

    /**
     * 通过商品的名称获取所有的商品编号和品牌名称
     *
     * @param name
     * @return
     */
    List<Map<String, Object>> selectShopForBrandByShopName(String name);

    /**
     * 通过商品的编号获取所有的商品关联的规格
     *
     * @param shopId
     * @return
     */
    List<Map<String, Object>> selectSpeByShopId(String shopId);

    /**
     * 获取规格 通过规格的编号
     *
     * @param speId
     * @return
     */
    Map<String, Object> getSpeDataBySpeId(String speId);

    /**
     * 根据商品规格编号返回这个规格的所有对应的型号
     *
     * @param speId
     * @return
     */
    List<Map<String, Object>> selectMoBySpeId(String speId);

    /**
     * 根据规格的编号查询所有的型号中的单位
     *
     * @param speId
     * @return
     */
    List<String> selectUnitBySpeId(@Param("speId") String speId);

    /**
     * 查询所有的供应商信息 根据供应商的类型 硬装或者软装的
     *
     * @param supType 类型
     * @return
     */
    List<Map<String, Object>> selectSupList(@Param("supType") String supType);

    /**
     * 录入新的型号
     *
     * @param params
     * @return
     */
    int insertShopForMo(Map<String, Object> params);

    /**
     * 录入新的规格
     *
     * @param params
     * @return
     */
    int insertShopForSpe(Map<String, Object> params);

    /**
     * 录入新的商品
     *
     * @param params
     * @return
     */
    int insertShopForCom(Map<String, Object> params);

    /**
     * 获得领用单详表数据 通过ID
     *
     * @param id
     * @return
     */
    Map<String, Object> getReceiveInfoById(Integer id);

    /**
     * 获得 品牌的名称通过型号的编号去查询
     *
     * @param moId
     * @return
     */
    String getBrandNameByMoId(String moId);

    /**
     * 获取商品主 的一条数据
     *
     * @param comId
     * @return
     */
    Map<String, Object> getShopMainOne(String comId);

    /**
     * 更新商品主表 的使用弃用
     *
     * @param comId
     * @param flag
     * @return
     */
    int updateShopMainByComId(@Param("comId") String comId, @Param("flag") int flag);


    /**
     * 查询商品的名称和图片
     *
     * @param ids
     * @return
     */
    @IgnoreAuth
    List<Map<String, Object>> selectShopNameAndIconByIds(@Param("ids") List<String> ids);


    /**
     * 根据房源配置主编号 详表的数据
     *
     * @param configId
     * @return
     */
    @IgnoreAuth
    List<Map<String, Object>> selectConfigInfoData(String configId);


    /**
     * 查询商品的编号 根据房源配置编号
     *
     * @param ids
     * @return
     */
    @IgnoreAuth
    List<String> selectComIdArrayByConIdList(@Param("ids") List<String> ids);

}
